home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-03 / dosbasic.zip / ASM.ZIP / BEEPER.ASM next >
Assembly Source File  |  1990-12-19  |  2KB  |  63 lines

  1. ;«RM82»«TS8,16,24,32,40,48»
  2. ;=========================================================================
  3. ;   Copyright (C) Copr. 1990 by Sidney J. Kelly
  4. ;                   All Rights Reserved.
  5. ;           Sidney J. Kelly
  6. ;           150 Woodhaven Drive
  7. ;           Pittsburgh, PA 15228
  8. ;           home phone 412-561-0950 (7pm to 9:30pm EST)
  9. ;
  10. ; Updated 9/20/90
  11. ;=========================================================================
  12.  
  13. ;=========================================================================
  14. ; DECLARE SUB BEEPER
  15. ; BEEPER
  16. ; Primarily used to show you how to make sound in a somewhat machine
  17. ; independent basis
  18. ;=========================================================================
  19.  
  20. DOSSEG
  21. .model medium
  22. .code
  23.         public  BEEPER
  24.  
  25. ; Please do not remove
  26. Copyright       DB    13,10,'Copyright Copr. (C) 1990 Sidney J. Kelly',13,10
  27. Copyright1      DB    'All Rights Reserved',13,10,26
  28.  
  29. EVEN
  30. BEEPER PROC FAR
  31.         Pushf
  32.         Mov    DX,03000h        ; default delay for AT & above
  33.     Xor    AX,AX            ; clear AX
  34.     Push   AX               ; put on stack
  35.     Popf                    ; put in flags
  36.     Pushf                   ; put back on stack
  37.     Pop    AX               ; get flags back in AX
  38.     And    AX,0F000h        ; clear all but upper 4 bits
  39.     Cmp    AX,0F000h        ; if bits 12-15 are set then CPU
  40.     JNE    @f               ; is not an 80286, 80386 or 80486
  41.     Mov    DX,02000h        ; delay for a PC/XT
  42. @@:
  43.         In      AL,61h          ; save old speaker setting
  44.         Push    AX
  45.         Mov     AL,0            ; set speaker frequency
  46.         Out     42h,AL          ; low byte
  47.         Mov     AL,5            ; lower this number for higher frequency
  48.     Jmp    $+2             ; AT & above delay
  49.         Out     42h,AL          ; high byte
  50.         Pop     AX              ; old speaker setting
  51.         Push    AX              ; save again
  52.         Or      AL,3            ; turn on speaker
  53.         Out     61h,AL
  54.         Mov     CX,DX           ; the delay factor
  55. waitloop:
  56.         Loop    waitloop
  57.         Pop     AX              ; turn off speaker
  58.         Out     61h,AL
  59.     Popf
  60.         Ret
  61. BEEPER ENDP
  62. end
  63.